package cn.wuxing.mediation.infoconfig.mapper;

import cn.wuxing.mediation.common.core.domain.entity.IcMediatorCommittee;
import cn.wuxing.mediation.infoconfig.domain.dto.AddMediatorCommitteeUserDTO;
import cn.wuxing.mediation.infoconfig.domain.vo.MediatorCommitteeUserVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 调解委员会管理 数据层
 *
 * @author mediation
 */
@Mapper
public interface IcMediatorCommitteeMapper extends BaseMapper<IcMediatorCommittee> {

    /**
     * 查询调解委员会管理数据
     *
     * @param icMediatorCommittee 调解委员会信息
     * @return 调解委员会信息集合
     */
    public List<IcMediatorCommittee> selectMediatorCommitteeList(IcMediatorCommittee icMediatorCommittee);

    public List<IcMediatorCommittee> selectMediatorCommitteeListByWindow(
            @Param("icMediatorCommittee") IcMediatorCommittee icMediatorCommittee, @Param("windowIds") List<Long> windowIds);

    /**
     * 根据调解委员会ID查询信息
     *
     * @param id 调解委员会ID
     * @return 调解委员会信息
     */
    public IcMediatorCommittee selectMediatorCommitteeById(@Param("id") Long id);

    /**
     * 根据ID查询所有子调解委员会
     *
     * @param id 调解委员会ID
     * @return 调解委员会列表
     */
    public List<IcMediatorCommittee> selectChildrenById(@Param("id") Long id);

    /**
     * 根据ID查询所有子调解委员会（正常状态）
     *
     * @param id 调解委员会ID
     * @return 子调解委员会数
     */
    public int selectNormalChildrenById(@Param("id") Long id);

    /**
     * 是否存在子节点
     *
     * @param id 调解委员会ID
     * @return 结果
     */
    public int hasChildById(@Param("id") Long id);

    /**
     * 查询调解委员会是否存在用户
     *
     * @param dto dto
     * @return 结果
     */
    public int checkMediatorCommitteeExistUser(@Param("dto") AddMediatorCommitteeUserDTO dto);

    /**
     * 校验调解委员会名称是否唯一
     *
     * @param mediatorCommitteeName 调解委员会名称
     * @param parentId 父调解委员会ID
     * @return 结果
     */
    public IcMediatorCommittee checkMediatorCommitteeNameUnique(
            @Param("mediatorCommitteeName") String mediatorCommitteeName, @Param("parentId") Long parentId);

    /**
     * 新增调解委员会信息
     *
     * @param icMediatorCommittee 调解委员会信息
     * @return 结果
     */
    public int insertIcMediatorCommittee(IcMediatorCommittee icMediatorCommittee);

    /**
     * 修改调解委员会信息
     *
     * @param icMediatorCommittee 调解委员会信息
     * @return 结果
     */
    public int updateMediatorCommittee(IcMediatorCommittee icMediatorCommittee);

    /**
     * 修改所在调解委员会正常状态
     *
     * @param ids 调解委员会ID组
     */
    public void updateMediatorCommitteeStatusNormal(@Param("ids") Long[] ids);

    /**
     * 修改子元素关系
     *
     * @param committees 子元素
     * @return 结果
     */
    public int updateChildren(@Param("committees") List<IcMediatorCommittee> committees);

    /**
     * 删除调解委员会
     *
     * @param id ID
     * @return 结果
     */
    public int delById(@Param("id") Long id);

    /**
     * 获取调解委员会用户
     *
     * @param mediatorCommitteeId
     * @return
     */
    List<MediatorCommitteeUserVO> getMediatorCommitteeUserList(@Param("name") String name,
            @Param("mediatorCommitteeId") Long mediatorCommitteeId);
}
